/* 
基础数据类型
1. boolean
2. number
3. string
4. null和undefined
5. 数组
6. 元组(Tuple) 
7. 枚举(enum)
8. any
9. void
10. object
*/

(function () {
  // 1. boolean
  let isDone: boolean = false
  isDone = true
  // isDone = 2  // error 不能将类型“number”分配给类型“boolean”

  // 2. number
  let a1: number = 10
  let a2: number = 0b1010  // 二进制
  let a3: number = 0o12 // 八进制
  let a4: number = 0xa // 十六进制

  // 3. string
  let name: string = 'tom'
  let age: number = 12
  let info: string = `我叫${name}, 今年${age}`

  // 4. null和undefined
  let n: null = null
  let u: undefined = undefined
  // n = 'abc' // error
  // u = 'abc'  // error
  // null和undefined是所有其它类型的子类型
  name = null
  name = undefined

  // 5. 数组
  let list1: number[] = [1, 3]
  let list2: Array<string> = ['abc', 'a', null]
  // list2.push(3)  // error

  // 6. 元组(Tuple): 元素个数和类型确定的数组
  let tArray: [string, number] = [null, null]
  tArray[0] = 'abc'
  tArray[1] = 3

  // 7. 枚举(enum)
  enum Color {
    Red,
    Green = 4,
    Blue
  }
  console.log(Color)
  let myColor: Color = Color.Green
  console.log(myColor, Color.Blue, Color[2])

  // 8. any
  let b: any = 3
  b = 'abc'
  let arr: any[] = [1, 'abc', true, {}]


  // 9. void
  function fn (): void { // 代表函数没有返回值
    // return 1 // error
    return undefined
    // return null
  }

  // 10. object
  function fn2 (x: object): object {
    // return {}
    // return []
    // return () => {}
    // return 1 // error
    // return null
    return undefined
  }
})()

